package com.linkhub.oms.data.sync.api.wms.domain.request;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * @Description: EntryOrderCreateRequest
 * @Author: echo
 * @Date: 2024/5/5 21:19
 * @Version: 1.0
 */
@NoArgsConstructor
@Data
public class EntryOrderCreateRequest implements Serializable {


    /**
     * request
     */
    @JSONField(name = "request")
    private Request request;

    public static EntryOrderCreateRequest createRequest(Request.EntryOrder entryOrder,
                                                        Request.OrderLines orderLines) {
        EntryOrderCreateRequest request = new EntryOrderCreateRequest();
        Request innerRequest = new Request();
        innerRequest.setEntryOrder(entryOrder);
        innerRequest.setOrderLines(orderLines);
        request.setRequest(innerRequest);

        return request;
    }

    /**
     * Request
     */
    @NoArgsConstructor
    @Data
    public static class Request {
        /**
         * entryOrder
         */
        @JSONField(name = "entryOrder")
        private EntryOrder entryOrder;
        /**
         * orderLines
         */
        @JSONField(name = "orderLines")
        private OrderLines orderLines;

        /**
         * EntryOrder
         */
        @NoArgsConstructor
        @Data
        public static class EntryOrder {
            /**
             * entryOrderCode
             */
            @JSONField(name = "entryOrderCode")
            private String entryOrderCode;
            /**
             * ownerCode
             */
            @JSONField(name = "ownerCode")
            private String ownerCode;
            /**
             * warehouseCode
             */
            @JSONField(name = "warehouseCode")
            private String warehouseCode;
            /**
             * orderCreateTime
             */
            @JSONField(name = "orderCreateTime")
            private String orderCreateTime;
            /**
             * isRelease
             */
            @JSONField(name = "isRelease")
            private String isRelease;
            /**
             * orderType
             */
            @JSONField(name = "orderType")
            private String orderType;
            /**
             * expectStartTime
             */
            @JSONField(name = "expectStartTime")
            private String expectStartTime;
            /**
             * logisticsName
             */
            @JSONField(name = "logisticsName")
            private String logisticsName;
            /**
             * expressCode
             */
            @JSONField(name = "expressCode")
            private String expressCode;
            /**
             * supplierCode
             */
            @JSONField(name = "supplierCode")
            private String supplierCode;
            /**
             * supplierName
             */
            @JSONField(name = "supplierName")
            private String supplierName;
            /**
             * qcMark
             */
            @JSONField(name = "qcMark")
            private String qcMark;
            /**
             * documentMaker
             */
            @JSONField(name = "documentMaker")
            private String documentMaker;
            /**
             * remark
             */
            @JSONField(name = "remark")
            private String remark;
            /**
             * userDefined1
             */
            @JSONField(name = "userDefined1")
            private String userDefined1;
            /**
             * userDefined2
             */
            @JSONField(name = "userDefined2")
            private String userDefined2;
            /**
             * userDefined3
             */
            @JSONField(name = "userDefined3")
            private String userDefined3;
            /**
             * userDefined4
             */
            @JSONField(name = "userDefined4")
            private String userDefined4;
            /**
             * outBizCode
             */
            @JSONField(name = "outBizCode")
            private String outBizCode;
        }

        /**
         * OrderLines
         */
        @NoArgsConstructor
        @Data
        public static class OrderLines {
            /**
             * orderLine
             */
            @JSONField(name = "orderLine")
            private List<OrderLine> orderLine;

            /**
             * OrderLine
             */
            @NoArgsConstructor
            @Data
            public static class OrderLine {
                /**
                 * ownerCode
                 */
                @JSONField(name = "ownerCode")
                private String ownerCode;
                /**
                 * itemCode
                 */
                @JSONField(name = "itemCode")
                private String itemCode;
                /**
                 * itemId
                 */
                @JSONField(name = "itemId")
                private String itemId;
                /**
                 * itemName
                 */
                @JSONField(name = "itemName")
                private String itemName;
                /**
                 * packUom
                 */
                @JSONField(name = "packUom")
                private String packUom;
                /**
                 * planQty
                 */
                @JSONField(name = "planQty")
                private String planQty;
                /**
                 * virtualWarehouse
                 */
                @JSONField(name = "virtualWarehouse")
                private String virtualWarehouse;
                /**
                 * inventoryType
                 */
                @JSONField(name = "inventoryType")
                private String inventoryType;
                /**
                 * productDate
                 */
                @JSONField(name = "productDate")
                private String productDate;
                /**
                 * expireDate
                 */
                @JSONField(name = "expireDate")
                private String expireDate;
                /**
                 * batchCode
                 */
                @JSONField(name = "batchCode")
                private String batchCode;
                /**
                 * stockinDate
                 */
                @JSONField(name = "stockinDate")
                private String stockinDate;
                /**
                 * userDefined1
                 */
                @JSONField(name = "userDefined1")
                private String userDefined1;
                /**
                 * userDefined2
                 */
                @JSONField(name = "userDefined2")
                private String userDefined2;
                /**
                 * userDefined3
                 */
                @JSONField(name = "userDefined3")
                private String userDefined3;
                /**
                 * userDefined4
                 */
                @JSONField(name = "userDefined4")
                private String userDefined4;
                /**
                 * lineNo
                 */
                @JSONField(name = "lineNo")
                private String lineNo;
                /**
                 * customJson
                 */
                @JSONField(name = "customJson")
                private String customJson;
                /**
                 * customField1
                 */
                @JSONField(name = "customField1")
                private String customField1;
                /**
                 * customField2
                 */
                @JSONField(name = "customField2")
                private String customField2;
                /**
                 * customField3
                 */
                @JSONField(name = "customField3")
                private String customField3;
                /**
                 * customField4
                 */
                @JSONField(name = "customField4")
                private String customField4;
                /**
                 * customField5
                 */
                @JSONField(name = "customField5")
                private String customField5;
                /**
                 * customField6
                 */
                @JSONField(name = "customField6")
                private String customField6;
                /**
                 * customField7
                 */
                @JSONField(name = "customField7")
                private String customField7;
                /**
                 * customField8
                 */
                @JSONField(name = "customField8")
                private String customField8;
            }
        }
    }
}
